package sis.testing;/*
 * @auther 顶风少年
 * @mail dfsn19970313@foxmail.com
 * @date 2019-07-30 21:42
 * @notify
 * @version 1.0
 */

import junit.framework.TestCase;
import junit.runner.ClassPathTestCollector;
import junit.runner.TestCollector;

import java.io.File;
import java.util.Collections;
import java.util.List;

public class SuiteBuilder {
    public List<String> gatherTestClassNames() {
        TestCollector collector = new ClassPathTestCollector() {
            public boolean isTestClass(String classFileName) {
                //判断是不是 .class 结尾
                if (!super.isTestClass(classFileName)) {
                    return false;
                }
                //在排除出否是 Test的子类
                //转换 文件路径 \sis\summertest\SummerCourseSessionTest.class -->sis.summertest.SummerCourseSessionTest
                String className = classNameFromFile(classFileName);
                //根据类名创建类
                Class klass = createClass(className);
                //该方法通过标识转换或扩展参考转换来测试由指定的Class 类表示的类型是否可以转换为由此类对象表示的类型
                return TestCase.class.isAssignableFrom(klass);
            }
        };
        return Collections.list(collector.collectTests());
    }


    //根据类名创建 Class
    private Class createClass(String name) {
        try {
            return Class.forName(name);
        } catch (ClassNotFoundException e) {
            return null;
        }
    }
}
